package org.test4j.mock;

import org.test4j.mock.stub.Impostor;
import org.test4j.mock.stub.ProxyInvokable;

/**
 * 对类进行代理加强
 *
 * @author wudarui
 */
public class Stubs {
    private Stubs() {
    }

    /**
     * 创建stub对象, 并且调用定义好的Mock方法
     *
     * @param aClass
     * @param <T>
     * @return
     */
    public static <T> T fake(Class<T> aClass) {
        return (T) Impostor.fake(aClass);
    }

    /**
     * 创建stub对象, 并且调用定义好的Mock方法
     *
     * @param aClass
     * @param args
     * @param <T>
     * @return
     */
    public static <T> T fake(Class<T> aClass, Object... args) {
        return (T) Impostor.fake(aClass, args);
    }

    /**
     * @param invokable
     * @param baseType
     * @param interfaces
     * @param <T>
     * @return
     */
    public static <T> T proxy(ProxyInvokable invokable, Class<T> baseType, Class... interfaces) {
        return Impostor.proxy(invokable, baseType, interfaces);
    }
}